
//
//  NSObject+PrintIvar.swift
//  表情键盘
//
//  Created by iOS on 16/9/28.
//  Copyright © 2016年 iOS. All rights reserved.
//

import Foundation

extension NSObject {
    class func printIvar() -> Void {
        // 获取类的属性
        // cls: AnyClass!: 要获取属性的类
        // outCount: UnsafeMutablePointer<UInt32>!: 不安全的可变的 Uint32 类型的指针,成员变量的数量,C语言的数组是不能直接获取到长度的
        var count: UInt32 = 0
        
        // 返回的是数组的首地址: UnsafeMutablePointer<Ivar?>, 这个数组里面存放的是 Ivar? 类型的内容
        let ivars = class_copyIvarList(self, &count)!
        
        // 获取数组中的每个元素
        for i in 0..<Int(count) {
            // 获取每一个ivar, 成员变量
            let ivar = ivars[i]
            
            // 名称
            // UnsafePointer<Int8>!
            let cName = ivar_getName(ivar)!
            // 转成字符串
            let name = String(cString: UnsafePointer<CChar>(cName), encoding: .utf8)
            print("name = \(name)")
        }
        
        // 释放
        free(ivars)
    }
}
